home *** CD-ROM | disk | FTP | other *** search
- {
- KENT BRIGGS
-
- Here is what I came up with regarding my problem of needing a large
- heap (temporarily) and needing memory for an EXEC routine:
- }
-
- procedure heap_shrink; {free up all unused heap}
- begin
- reg.bx := memw[seg(heapptr) : ofs(heapptr) + 2] - prefixseg;
- reg.es := prefixseg;
- reg.ah := $4a; {dos memory alloc. interrupt}
- msdos(reg);
- end;
-
- procedure heap_expand; {reclaim unused heap}
- begin
- reg.bx := memw[seg(heapend) : ofs(heapend) + 2] - prefixseg;
- reg.es := prefixseg;
- reg.ah := $4a;
- msdos(reg);
- end;
-
- {
- Leave the default heapmax at 655360. Dispose of all temporary pointers
- and call heap_shrink right before exec(my_prgm) and heap_expand right
- after. The memw's get the segment addresses for the heapend and heapptr
- variables (see memory map in manual). Subtract the PSP segment and that
- gets you the number of paragraphs (16 byte blocks) to allocate.
-
- Anyone see any dangers with this scheme? I instantly freed up 110K for
- DOS shells in my application. No problems so far.
- }